package JDK91011;

import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * @author Lenl
 * @version v1.0
 * @create 2021-06-08 22:21
 * @description
 */
public class Java10Test {
    /*
    局部变量的类型推断
     */
    @Test
    public  void test1(){
        //1.声明变量是，根据所赋的值，推断变量的值
        var num=10;

        var list=new ArrayList<Integer>();
        //2.遍历操作
        for (var i:list){
            System.out.println(i);
        }
        //3.普通的遍历操作
        for (var i=0;i<100;i++){
            System.out.println(i);
        }

    }

    //java10新特性1：局部变量类型推断
    @Test
    public void test2(){
        //1.局部变量不赋值
        // var num;
        //2.Lambda表达式与方法引用，左边函数式接口不能声明为var
        //Supplier<Double> sup=()->Math.random();
        //var sup=()->Math.random();
        //3.方法引用中
        //Consumer<String> con=System.out::println;
        //var con=System.out::println;
        //4.数组的静态初始化中,下2情况也不可以
        //int[] arr=new int[]{1,2,3,4};
        //var arr={1,2,3,4};
        //5.没有初始化的局部变量声明
        //var s=null;
        //6.方法的返回值类型
        //public var method1(){}
        //7.方法的参数类型
        //public string method2(var num){}
        //8.构造器的参数类型（同方法）
        //9.属性
        //var num;
        //10.catch块
        //catch（var e）{}
    }
    //java10新特性2：copyOf()，用于创建一份只读的集合
    @Test
    public void test3(){
        //示例1：
        var list1= List.of("Java","C","C#");
        var copy1= List.copyOf(list1);
        System.out.println(list1==copy1); //true

        //示例2：
        var list2=new ArrayList<String>();
        list2.add("aaa");
        var copy2=List.copyOf(list2);
        System.out.println(list2==copy2);//false

        //结论：copyOf(Xxx coll):如果coll本身就是只读集合，则返回当前的只读集合
        //     如果不是个只读集合，则返回一个新的集合，且集合是只读的


    }
}
